home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / toollib / source / support.s < prev   
Text File  |  1995-12-30  |  5KB  |  180 lines

  1.                 opt     l+,o+,ow-
  2. *
  3. *   support.s version 8.1 - © Copyright 1990 Jaba Development
  4. *
  5. *   Author    : Jan van den Baard
  6. *   Assembler : Devpac version 2.14
  7. *
  8. *   library support routines.
  9. *
  10.  
  11.                 incdir  'sys:devpac_inc/'
  12.                 include 'mymacros.i'
  13.                 include 'exec/exec_lib.i'
  14.  
  15. *
  16. * Format routine for "GetDate" which gets it's arguments from the stack.
  17. *
  18.                 xdef    DoFmt
  19.  
  20. DoFmt:          movem.l a2-a3/a6,-(sp)
  21.                 move.l  16(sp),a3
  22.                 move.l  20(sp),a0
  23.                 lea.l   24(sp),a1
  24.                 move.l  #DoBuf,a2
  25.                 move.l  (_SysBase).w,a6
  26.                 libcall RawDoFmt
  27.                 movem.l (sp)+,a2-a3/a6
  28.                 rts
  29.  
  30. *
  31. * This gets called by "RawDoFmt". When called A3 contains the buffer pointer
  32. * and d0 contains the next formatted character.
  33. *
  34.                 xdef    DoBuf
  35.  
  36. DoBuf:          move.b  d0,(a3)+
  37.                 rts
  38.  
  39. *
  40. * Find the last occurance of a character in a string. A0 must point to a
  41. * null terminated string. D0 must contain the character looked for. When
  42. * the routine finds the character the addres is returned else null is
  43. * returned.
  44. *
  45.                 xdef    CharRight
  46.  
  47. CharRight:      movea.l a0,a1
  48. RFindEnd:       tst.b   (a0)+
  49.                 bne.s   RFindEnd
  50. RFindChar:      cmpa.l  a0,a1
  51.                 beq.s   RNotFound
  52.                 cmp.b   -(a0),d0
  53.                 bne.s   RFindChar
  54.                 move.l  a0,d0
  55.                 rts
  56. RNotFound:      cldat   d0
  57.                 rts
  58.  
  59. *
  60. * Find the first occurance of a character in a string. A0 must point to a
  61. * null terminated string. D0 must contain the character looked for. When
  62. * the routine finds the character the addres is returned else null is
  63. * returned.
  64. *
  65.                 xdef    CharLeft
  66.  
  67. CharLeft:       movea.l a0,a1
  68. LFindEnd:       tst.b   (a1)+
  69.                 bne.s   LFindEnd
  70. LFindChar:      cmpa.l  a0,a1
  71.                 beq.s   LNotFound
  72.                 cmp.b   (a0)+,d0
  73.                 bne.s   LFindChar
  74.                 move.l  a0,d0
  75.                 dec.l   d0
  76.                 rts
  77. LNotFound:      cldat   d0
  78.                 rts
  79.  
  80. *
  81. * Copy a null terminated string into a buffer. A0 must point to the buffer.
  82. * A1 must point to the null terminated string to be copied.
  83. *
  84.                 xdef    StrCpy
  85.  
  86. StrCpy:         tst.b   (a1)
  87.                 beq.s   no
  88.                 move.b  (a1)+,(a0)+
  89.                 bne.s   StrCpy
  90. no:             move.b  #0,(a0)
  91.                 rts
  92.  
  93. *
  94. * Convert a lower case alphabetical character into upper case.
  95. * D0 must contain the character.
  96. *
  97.                 xdef    ToUpper
  98.  
  99. ToUpper:        cmp.b   #'a',d0
  100.                 bmi.s   NotLoAlp
  101.                 cmp.b   #'z',d0
  102.                 bhi.s   NotLoAlp
  103.                 sub.b   #' ',d0
  104. NotLoAlp:       rts
  105.  
  106. *
  107. * Convert a upper case alphabetical character into lower case.
  108. * D0 must contain the character.
  109. *
  110.                 xdef    ToLower
  111.  
  112. ToLower:        cmp.b   #'A',d0
  113.                 bmi.s   NotUpAlp
  114.                 cmp.b   #'Z',d0
  115.                 bhi.s   NotUpAlp
  116.                 add.b   #' ',d0
  117. NotUpAlp:       rts
  118.  
  119. *
  120. * Calculate the length of a null terminated string. A0 must be a pointer
  121. * to a null terminated string. The length of the string, without the null
  122. * byte, is returned in D0.
  123. *
  124.                 xdef    StrLen
  125.  
  126. StrLen:         cldat   d0
  127. SizeLoop:       tst.b   (a0)+
  128.                 beq.s   HaveSize
  129.                 inc.l   d0
  130.                 bra.s   SizeLoop
  131. HaveSize:       rts
  132.  
  133. *
  134. * Compare two strings (case dependant). A0 must point to a null terminated
  135. * string. A1 must point to a null terminated string. -1, 0 or 1 is returned
  136. * depending on wether the string in A0 is to be considerd smaller, equal or
  137. * bigger than the string in A1.
  138. *
  139.  
  140.                 xdef    StrCmp
  141.  
  142. StrCmp:         move.b  (a0)+,d0
  143.                 tst.b   d0
  144.                 beq.s   Smaller
  145.                 cmp.b   (a1)+,d0
  146.                 blo.s   Smaller
  147.                 bhi.s   Bigger
  148.                 tst.b   d0
  149.                 bne.s   StrCmp
  150.                 cldat   d0
  151.                 rts
  152. Smaller:        moveq   #-1,d0
  153.                 rts
  154. Bigger:         moveq   #1,d0
  155.                 rts
  156.  
  157. *
  158. * Compare two strings (case independant). A0 must point to a null terminated
  159. * string. A1 must point to a null terminated string. -1, 0 or 1 is returned
  160. * depending on wether the string in A0 is to be considerd smaller, equal or
  161. * bigger than the string in A1.
  162. *
  163.                 xdef    StriCmp
  164.  
  165. StriCmp:        move.b  (a0)+,d0
  166.                 bsr     ToLower
  167.                 move.b  d0,d1
  168.                 tst.b   d1
  169.                 beq.s   Smaller
  170.                 move.b  (a1)+,d0
  171.                 bsr     ToLower
  172.                 cmp.b   d0,d1
  173.                 blo.s   Smaller
  174.                 bhi.s   Bigger
  175.                 tst.b   d1
  176.                 bne.s   StriCmp
  177.                 cldat   d0
  178.                 rts
  179.  
  180.